<?php

namespace Packages\Authority\Repositories;

use App\Tools\Common;
use Packages\Authority\Models\AuthInfoModel;
use Packages\Authority\Repositories\BaseRepository;
use Illuminate\Support\Facades\DB;
use Exception;

class AuthInfoRepositories
{
    use BaseRepository;

    protected static $db;

    public function __construct()
    {
        self::$db = new AuthInfoModel;
    }

    /**
     * 查询条件
     */
    public function where($data)
    {

        return self::$db
            ->when(@$data['guid'], function ($q) use ($data) {
                $q->where('guid', $data['guid']);
            })
            ->when(@$data['guids'], function ($q) use ($data) {
                $q->whereIn('guid', $data['guids']);
            })
            ->when(@$data['status'], function ($q) use ($data) {
                $q->where('status', $data['status']);
            })
            ->when(@$data['platform'], function ($q) use ($data) {
                $q->where('platform', $data['platform']);
            })
            ->when(@$data['name'], function ($q) use ($data) {
                $q->where('name', 'like', '%' . $data['name'] . '%');
            })
            ->when(@$data['where'], function ($q) use ($data) {
                $q->where($data['where']);
            })
            ->when(@$data['app_id'], function ($q) use ($data) {
                $q->where('app_id', $data['app_id']);
            });
    }

    /**
     * 获取全部
     * @param $data
     * @return array
     */
    public function all($data)
    {

        $result =  $this->where($data)
            ->when(@$data['order'], function ($q) use ($data) {
                $q->orderBy($data['order'], $data['by'] ?? 'desc');
            })->get();

        // 转化树状结构，树状结构需要返回父级
        if (isset($data['tree'])) {
            $result = Common::treeList($result->toArray(), 'pid', 'guid', '0');
        }

        return $result;
    }

    /**
     * 添加
     * @param array $data 
     * @return collection
     */
    public function create(array $data)
    {

        $info = self::$db->create([
            'guid' => Common::getUuid(), // 唯一ID
            'name' => $data['name'], // 名称
            'url' => $data['url'], // 路由/动作key
            'pid' => $data['pid'] ?? 0, // 父级id
            'type' => $data['type'], // 类型 1 菜单 2 动作 3 平台 4 模块
            'platform' => $data['platform'] ?? 'admin', // 平台
            'app_id' => $data['app_id'] ?? '0' // 应用ID
        ]);

        return $info;
    }

    /**
     * 更新
     * @param array $guid 
     * @param array $data 
     * @return int
     */
    public function update($guid, array $data)
    {

        return self::$db->where('guid', $guid)->update([
            'name' => $data['name'], // 名称
            'url' => $data['url'], // 路由/动作key
            'type' => $data['type'], // 类型 1 菜单 2 动作 3 平台 4 模块
        ]);
    }
}
